/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License"),
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @addtogroup TeeTrusted
 * @{
 *
 * @brief TEE（Trusted Excution Environment）可信执行环境API。
 *
 * 提供安全能力API，例如可信存储、加解密及可信时间等，用于可信应用程序开发。
 *
 * @since 20
 */

/**
 * @file tee_time_api.h
 *
 * @brief 提供用于管理可信执行环境（TEE）时间的API。
 *
 * 您可以使用这些API实现TEE中的时间相关功能。
 *
 * @library NA
 * @kit TEEKit
 * @include <TEEKit/tee_time_api.h>
 * @syscap SystemCapability.Tee.TeeClient
 * @since 20
 */

#ifndef __TEE_TIME_API_H
#define __TEE_TIME_API_H

#include "tee_defines.h"
#include "tee_rtc_time_api.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 获取当前TEE系统的RTC时间。
 *
 * @param time [OUT]当前TEE系统的RTC时间。
 *
 * @since 20
 */
void get_sys_rtc_time(TEE_Time *time);

/**
 * @brief 获取当前的可信执行环境（TEE）系统时间。
 *
 * @param time 指向获取到的当前系统时间的指针。
 *
 * @since 20
 */
void TEE_GetSystemTime(TEE_Time *time);

/**
 * @brief 等待指定的时间段，单位为毫秒。
 *
 * @param timeout 指定的等待时间，单位为毫秒。
 *
 * @return TEE_SUCCESS：操作成功。\n
           TEE_ERROR_CANCEL：等待被取消。\n
           TEE_ERROR_OUT_OF_MEMORY：内存不足以完成操作。
 * @since 20
 */
TEE_Result TEE_Wait(uint32_t timeout);

/**
 * @brief 获取此可信应用程序（TA）的持久时间。
 *
 * @param time 指向TA持久时间的指针。
 *
 * @return TEE_SUCCESS：操作成功。\n
           TEE_ERROR_TIME_NOT_SET：持久时间未设置。\n
           TEE_ERROR_TIME_NEEDS_RESET：持久时间损坏且应用程序不再可信。\n
           TEE_ERROR_OVERFLOW：TA持久时间中的秒数超出uint32_t的范围。\n
           TEE_ERROR_OUT_OF_MEMORY：内存不足以完成操作。
 * @since 20
 */
TEE_Result TEE_GetTAPersistentTime(TEE_Time *time);

/**
 * @brief 设置此TA的持久时间。
 *
 * @param time 指向TA持久时间的指针。
 *
 * @return TEE_SUCCESS：操作成功。\n
           TEE_ERROR_OUT_OF_MEMORY：内存不足以完成操作。\n
           TEE_ERROR_STORAGE_NO_SPACE：存储空间不足以完成操作。
 * @since 20
 */
TEE_Result TEE_SetTAPersistentTime(TEE_Time *time);

/**
 * @brief 获取当前丰富执行环境（REE）系统时间。
 *
 * @param time 指向获取到的REE系统时间的指针。
 *
 * @since 20
 */
void TEE_GetREETime(TEE_Time *time);

#ifdef __cplusplus
}
#endif

#endif
/** @} */